package com.liuh.servlet;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.liuh.pojo.CategoryInfo;
import com.liuh.pojo.OrderInfoVO;
import com.liuh.pojo.ProductInfo;
import com.liuh.service.CategoryService;
import com.liuh.service.impl.CategoryServiceImpl;
import com.liuh.util.OutMsg;
import com.liuh.util.Page;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.net.multipart.MultipartFormData;
import cn.hutool.core.net.multipart.UploadFile;
import cn.hutool.core.util.IdUtil;
import cn.hutool.extra.servlet.ServletUtil;

@SuppressWarnings("serial")
@WebServlet(urlPatterns = { "/test" })
public class TestServlet extends AdvanceServlet {

	CategoryService categoryService = new CategoryServiceImpl();

	/**
	 * @note 根据parentId获取分类数据(新增分类时，onChange事件触发获取下级数据)
	 * @author liuh
	 * @date 2021年5月31日 下午3:36:22
	 */
	public Dict categoryByParentId(HttpServletRequest req, HttpServletResponse response) {
		int parentId = Convert.toInt(req.getParameter("id"), 0);
		List<CategoryInfo> cates = categoryService.categoryByParentId(parentId);
		return OutMsg.success("成功", cates);
	}

	/**
	 * @note 跳转demo.jsp页面
	 * @author liuh
	 * @date 2021年5月31日 下午6:40:44
	 */
	public String toDemo(HttpServletRequest req, HttpServletResponse response) {
		Map<Integer, OrderInfoVO> map = categoryService.orders();// 所有订单数据
		req.setAttribute("orders", map);
		return "demo.jsp";
	}

	/**
	 * @note 分类管理页面
	 * @author liuh
	 * @date 2021年6月2日 下午4:28:20
	 */
	public String toCateView(HttpServletRequest req, HttpServletResponse response) {
		int pageIndex = Convert.toInt(req.getParameter("index"), 1);
		int pageSize = Convert.toInt(req.getParameter("size"), 10);
		// 分类分页数据
		Page<CategoryInfo> page = categoryService.catePage(pageIndex, pageSize);
		req.setAttribute("cates", page);
		return "cate.jsp";
	}

	/**
	 * @note 产品管理编辑页面
	 * @author liuh
	 * @date 2021年6月2日 下午8:43:25
	 */
	public String toProView(HttpServletRequest req, HttpServletResponse response) {
		int proId = Convert.toInt(req.getParameter("proId"), 0);// 产品id
		if (proId != 0) {
			List<CategoryInfo> cates = categoryService.cateInfoByProId(proId);// 产品id所对应的1、2、3级分类集合数据
			Dict selectCateId = categoryService.cateInfoByProId2(proId);// 产品id所对应的1、2、3级分类id
			req.setAttribute("cates", cates);
			req.setAttribute("selectCate", selectCateId);
		}
		req.setAttribute("proId", proId);
		return "product.jsp";
	}

	/**
	 * @note 根据分类id获取相应父级id
	 * @author liuh
	 * @date 2021年6月2日 下午6:54:43
	 */
	public Dict getParentIdByCateId(HttpServletRequest req, HttpServletResponse response) {
		int cateId = Convert.toInt(req.getParameter("cateId"));
		// 根据分类id获取相应父级id
		CategoryInfo cate = categoryService.findCateAndParent(cateId);
		// 1，2级分类数据
		List<CategoryInfo> cates12 = categoryService.findCate12();
		return OutMsg.success("成功").set("data", cate).set("data1", cates12);
	}

	/**
	 * @note ajax文件上传
	 * @author liuh
	 * @throws IOException
	 * @date 2021年6月1日 下午3:39:22
	 */
	public Dict doUpload(HttpServletRequest req, HttpServletResponse response) throws IOException {
		String uploadFilePath = req.getSession().getServletContext().getRealPath("upload");
		MultipartFormData formData = ServletUtil.getMultipart(req);
		UploadFile uploadFile = formData.getFile("file1");
		String fileName = IdUtil.simpleUUID() + "." + FileUtil.getSuffix(uploadFile.getFileName());
		uploadFile.write(uploadFilePath + File.separator + fileName);
		return OutMsg.success("成功").set("data", "upload/" + fileName);
	}

	/**
	 * @note 保存信息(文件路径、用户名)
	 * @author liuh
	 * @date 2021年6月1日 下午4:07:43
	 */
	public void saveInfo(HttpServletRequest req, HttpServletResponse response) throws IOException {
		response.setContentType("text/html;charset=UTF-8");
		MultipartFormData formData = ServletUtil.getMultipart(req);
		System.out.println("用户名：" + formData.getParam("uName"));
		System.out.println("文件路径：" + formData.getParam("filePath"));
		outReps(msgAlert("保存成功!", "test?action=toDemo"), response);
	}
	
	/**
	 * @note 加入购物车
	 * @author liuh
	 * @date 2021年6月8日 上午10:29:52
	 */
	public Dict addCart(HttpServletRequest req, HttpServletResponse response) {
		String proId=req.getParameter("proId");//产品编号
		HttpSession session=req.getSession();
		Dict cart= (Dict)session.getAttribute("cart");
		if(cart!=null) {
			if(Convert.toInt(cart.get(proId), 0)==0) {
				cart.set(proId, 1);
			}else {
				cart.set(proId, cart.getInt(proId)+1);
			}
		}else {
			session.setAttribute("cart", Dict.create().set(proId, 1));
		}
		return OutMsg.success("成功");
	}
	
	/**
	 * @note 查看购物车
	 * @author liuh
	 * @date 2021年6月8日 上午10:38:02
	 */
	public Dict showCart(HttpServletRequest req, HttpServletResponse response) {
		HttpSession session=req.getSession();
		Dict cart= (Dict)session.getAttribute("cart");
		List<ProductInfo> pros=null;
		if(cart!=null) {
			//根据产品id集合查询产品相关其他属性信息
			pros=categoryService.findProductByIds(cart.keySet());
			for (ProductInfo productInfo : pros) {
				//产品赋值数量属性
				productInfo.setNums(cart.getInt(productInfo.getId()+""));
			}
		}
		return OutMsg.success("成功").set("data", pros);
	}
	
	/**
	 * @note 清空购物车
	 * @author liuh
	 * @date 2021年6月8日 上午10:41:10
	 */
	public Dict delCart(HttpServletRequest req, HttpServletResponse response) {
		req.getSession().removeAttribute("cart");
		Dict cart= (Dict)req.getSession().getAttribute("cart");
		return OutMsg.success("成功").set("data", cart);
	}

	/**
	 * @note 重定向主页
	 * @author liuh
	 * @date 2021年6月1日 下午6:55:21
	 */
	public String toMain(HttpServletRequest req, HttpServletResponse response) throws IOException {
		return "redirect:main.jsp";
	}
	
}
